#include "stringtinylib.h"
#include "../constants.h"
#include <string.h>

int IsCharWhitespace ( char c ){
	if(c == ' ' || c== '\t')
		return TRUE;
	return FALSE;
}

int IsCharNumeric ( char c ){
	if(c <= '9' && c >= '0')
		return TRUE;
	return FALSE;
}

int IsCharIdent ( char c ){
	if( (c <= '9' && c >= '0')
	   || (c <= 'Z' && c >= 'A')
	   || (c <= 'z' && c >= 'a')
	   || c == '_')
		return TRUE;
	return FALSE;
}

int IsCharDelimiter ( char c ){
	if ( c == ':' || c == ',' || c == '"' ||
		c == '[' || c == ']' ||
			c == '{' || c == '}' ||
			IsCharWhitespace ( c ) || c == '\n' )
				return TRUE;
	return FALSE;
}

int IsStringInt ( char * str ){
	if ( !str )
		return FALSE;
	if ( strlen ( str ) == 0 )
		return FALSE;

	int index=0;
	if ( !IsCharNumeric(str[index]) ){
		if( str[index] != '-' )
			return FALSE;
		index ++;
	}
	if (index == strlen(str) )
		return FALSE;

	for(; index<strlen(str); index++){
		if( !IsCharNumeric(str[index]) )
			return FALSE;
	}

	return TRUE;

}

int IsStringFloat ( char * str ){
	if ( !str )
		return FALSE;
	if ( strlen ( str ) == 0 )
		return FALSE;

	int index=0;
        if ( !IsCharNumeric(str[index]) ){
                if( str[index] != '-' )
                        return FALSE;
                index ++; 
        }   
        if (index == strlen(str) )
                return FALSE;

	if (strlen(str)-index <3)//浮点数至少有3位 a.b
		return FALSE;
	if (str[index]=='.' || str[strlen(str)-1]=='.')//.不能在开头或结尾
		return FALSE;

	int iRadixPointFound = 0;

	for(; index<strlen(str); index++){
		if( !IsCharNumeric(str[index]) && str[index]!='.' )
			return FALSE;
		if( str[index]=='.' )
			iRadixPointFound ++;
	}
	if (iRadixPointFound != 1)
		return FALSE;

	return TRUE;

}

int IsStringWhitespace ( char * str ){
	if ( !str )
		return FALSE;
	if ( strlen ( str ) == 0 )
		return TRUE;

	int index=0;
	for(; index<strlen(str); index++){
		if ( !IsCharWhitespace( str[index] ) )
			return FALSE;
	}
	return TRUE;
}

int IsStringIdent ( char * str ){
	if ( !str || strlen ( str ) == 0 )
		return FALSE;
	if ( str[0]>='0' && str[0]<='9' )
		return FALSE;

	int index=0;
	for(; index<strlen(str); index++){
		if( !IsCharIdent(str[index]) )
			return FALSE;
	}
	return TRUE;
}

void strupr (char * str){
        while(*str!=NULL){
                if(*str>='a' && *str<='z')
                        *str = *str + 'A'-'a';
		str++;
        }
}

void copyStr(char * dest, char * src, int start, int end){
        int i = 0;
        for( ; start<=end; start++, i++ ){
                dest[i] = src[start];
        }
        dest[i] = '\0';
}
